package com.base.cn.platform.os.dao.course.catalog;

import com.base.cn.platform.os.common.mybatis.BaseDao;
import com.base.cn.platform.os.entity.course.catalog.CourseCatalog;
import com.base.cn.platform.os.entity.course.catalog.CourseLiveReminder;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 课程目录Dao
 *
 * @author s.li
 * @create 2018-04-25-19:44
 */
@Mapper
public interface CourseCatalogDao extends BaseDao<CourseCatalog> {

    /**
     * 查询用户课程最后学习目录列表
     *
     * @param clazz
     * @param params 查询条件
     * @return List<CourseCatalog>
     */
    List<CourseCatalog> findUserCourseLastStudyCatalogList(@Param("clazz") Class<CourseCatalog> clazz,
                                                           @Param("params") Map<String, Object> params);

    /**
     * 查询用户课程最后学习目录列表
     *
     * @param clazz
     * @param courseIds 课程ID串
     * @return List<CourseCatalog>目录列表
     */
    List<CourseCatalog> findLiveCourseListNodes(@Param("clazz") Class<CourseCatalog> clazz,
                                                @Param("courseIds") String courseIds);

    /**
     * 查询课程目录包含的随堂资料 和 随堂练习的数量
     *
     * @param clazz
     * @param courseId 课程ID串
     * @return List<CourseCatalog>目录列表
     */
    HashMap<String, Object> findDatumsAndQuestionNum(@Param("clazz") Class<CourseCatalog> clazz,
                                                     @Param("courseId") BigDecimal courseId);


    /**
     * 查询可要提醒的直播目录节点
     *
     * @param clazz
     * @param params 查询条件 startTime endTime
     * @return List<CourseLiveReminder>
     */
    List<CourseLiveReminder> findCourseLiveReminderList(@Param("clazz") Class<CourseCatalog> clazz,
                                                        @Param("params") Map<String, String> params);

    /**
     * 设置字段为空
     *
     * @param clazz
     * @param param
     */
    void updateColumnNull(@Param("clazz") Class<CourseCatalog> clazz, @Param("param") Map param);


    List<CourseCatalog> queryLiveCourseListNodes(@Param("clazz") Class<CourseCatalog> clazz,
                                                 @Param("params") CourseCatalog  courseCatalog,
                                                 @Param("courseIds") List<String> courseIds);


    Integer queryCurrentCount(@Param("clazz") Class<CourseCatalog> clazz, @Param("params") Map params);
}
